import axios from 'axios';
import {getStore, setStore} from './storage';
import { Message } from 'element-ui';

// 统一请求路径前缀
let base = '/zte-report';

// 超时设定
axios.defaults.timeout = 30000;

axios.interceptors.request.use(config => {
    return config;
}, err => {
    this.$notify.error({
        title: '错误',
        message: '服务器异常或无响应，请联系相关人员！'
    });
    return Promise.resolve(err);
});

// http response 拦截器
axios.interceptors.response.use(response => {
    const data = response.data;

    // 根据返回的code值来做不同的处理(和后端约定)
    switch (data.code) {
        case 401:
            // 未登录 清除已登录状态

            break;
        case 403:
            // 没有权限

            break;
        case 500:
            // 错误

            break;
        default:
            return data;
    }

    return data;
}, (err) => {
    // 返回状态码不为200时候的错误处理
    Message.error({
        title: '错误',
        message: err.toString()
    });
    return Promise.resolve(err);
});

export const getRequest = (url, params) => {
    let accessToken = getStore('accessToken');
    return axios({
        method: 'get',
        url: `${base}${url}`,
        params: params,
        headers: {
            'accessToken': accessToken
        }
    });
};

export const postRequest = (url, params) => {
    let accessToken = getStore("accessToken");
    return axios({
        method: 'post',
        url: `${base}${url}`,
        data: params,
        transformRequest: [function (data) {
            // let ret = '';
            // for (let it in data) {
            //     ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
            // }
            // return ret;
            return JSON.stringify(data);
        }],
        headers: {
            //'Accept': 'application/json',
            'Content-Type': 'application/json;charset=utf-8',
            'accessToken': accessToken
        }
    });
};


export const postRequest2 = (url, params) => {
    let accessToken = getStore("accessToken");
    return axios({
        method: 'post',
        url: `${base}${url}`,
        data: params,
        transformRequest: [function (data) {
            // let ret = '';
            // for (let it in data) {
            //     ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
            // }
            // return ret;
            return data;
        }],
        headers: {
            //'Accept': 'application/json',
            'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
            'accessToken': accessToken
        }
    });
};


export const putRequest = (url, params) => {
    let accessToken = getStore("accessToken");
    return axios({
        method: 'put',
        url: `${base}${url}`,
        data: params,
        transformRequest: [function (data) {
            let ret = '';
            for (let it in data) {
                ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
            }
            return ret;
        }],
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'accessToken': accessToken
        }
    });
};

export const deleteRequest = (url, params) => {
    let accessToken = getStore('accessToken');
    return axios({
        method: 'delete',
        url: `${base}${url}`,
        params: params,
        headers: {
            'accessToken': accessToken
        }
    });
};

export const uploadFileRequest = (url, params) => {
    let accessToken = getStore('accessToken');
    return axios({
        method: 'post',
        url: `${base}${url}`,
        params: params,
        headers: {
            'accessToken': accessToken
        }
    });
};